/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * PainelDisciplinas.java
 *
 * Created on 20/11/2009, 17:41:02
 */

package agendaBD;

import java.sql.ResultSet;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author Sueli
 */
public class PainelDisciplinas extends javax.swing.JPanel {

    private boolean editando = false;
    private boolean criando = false;

    /** Creates new form PainelDisciplinas */
    public PainelDisciplinas() {
        initComponents();
        cmbDificuldade.setVisible(false);
        cmbProfessor.setVisible(false);
        listaDisciplinas();
        lblNenhumProfessor.setVisible(false);
        cmbDificuldade.setSelectedIndex(-1);
    }

    private void listaDisciplinas()
    {
        try
        {
            ResultSet resultado = Conexao.getInstance().consultar("select nome,código from disciplinas order by código");

            String [] todasDisciplinas;

            int i;

            if(resultado.last())
            {
                todasDisciplinas = new String[resultado.getRow()];

                resultado.beforeFirst();

                for(i=0; resultado.next(); i++)
                {
                    todasDisciplinas[i] = resultado.getString(1)+" - "+resultado.getString(2);
                }
            }

            else
                todasDisciplinas = new String[0];

            lstDisciplinas.setListData(todasDisciplinas);
        }

        catch (Exception ex)
        {
            Logger.getLogger(PainelDisciplinas.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        pnlHead = new javax.swing.JPanel();
        lblDisiciplinas = new javax.swing.JLabel();
        lblDescCabecalho = new javax.swing.JLabel();
        icoDisciplinas = new javax.swing.JLabel();
        jPanel1 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        lstDisciplinas = new javax.swing.JList();
        btnNovaDisciplina = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        btnEditar = new javax.swing.JButton();
        btnExcluir = new javax.swing.JButton();
        txtNome = new javax.swing.JTextField();
        lblNome = new javax.swing.JLabel();
        lblCodigo = new javax.swing.JLabel();
        lblBibliografia = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        txtBibliografia = new javax.swing.JTextArea();
        lblDificuldade = new javax.swing.JLabel();
        txtDificuldade = new javax.swing.JTextField();
        cmbDificuldade = new javax.swing.JComboBox();
        lblProfessor = new javax.swing.JLabel();
        txtProfessor = new javax.swing.JTextField();
        cmbProfessor = new javax.swing.JComboBox();
        txtCodigo = new javax.swing.JFormattedTextField();
        txtCargaHoraria = new javax.swing.JFormattedTextField();
        lblCargaHoraria = new javax.swing.JLabel();
        lblModulacao = new javax.swing.JLabel();
        txtModulacao = new javax.swing.JFormattedTextField();
        txtFaltas = new javax.swing.JFormattedTextField();
        lblFaltas = new javax.swing.JLabel();
        lblNenhumProfessor = new javax.swing.JLabel();

        pnlHead.setBackground(new java.awt.Color(255, 255, 255));
        pnlHead.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 20, 1, 20));
        pnlHead.setPreferredSize(new java.awt.Dimension(100, 50));
        pnlHead.setLayout(new java.awt.GridBagLayout());

        lblDisiciplinas.setText("DISCIPLINAS");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.weightx = 0.8;
        pnlHead.add(lblDisiciplinas, gridBagConstraints);

        lblDescCabecalho.setFont(new java.awt.Font("Monospaced", 0, 10));
        lblDescCabecalho.setText("Listar, adicionar, editar e excluir disciplinas.");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.ipadx = 20;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(2, 0, 0, 0);
        pnlHead.add(lblDescCabecalho, gridBagConstraints);

        icoDisciplinas.setIcon(new javax.swing.ImageIcon(getClass().getResource("/agendaBD/imagens/BioLuigi1.jpg"))); // NOI18N
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridheight = 2;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        pnlHead.add(icoDisciplinas, gridBagConstraints);

        lstDisciplinas.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                lstDisciplinasMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(lstDisciplinas);

        btnNovaDisciplina.setText("Nova Disciplina");
        btnNovaDisciplina.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNovaDisciplinaActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 140, Short.MAX_VALUE)
                    .addComponent(btnNovaDisciplina, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 140, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(11, 11, 11)
                .addComponent(btnNovaDisciplina)
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 486, Short.MAX_VALUE))
        );

        btnEditar.setText("Editar");
        btnEditar.setEnabled(false);
        btnEditar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEditarActionPerformed(evt);
            }
        });

        btnExcluir.setText("Excluir");
        btnExcluir.setEnabled(false);
        btnExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExcluirActionPerformed(evt);
            }
        });

        txtNome.setEditable(false);

        lblNome.setText("Nome");

        lblCodigo.setText("Código");

        lblBibliografia.setText("Bibliografia");

        txtBibliografia.setColumns(20);
        txtBibliografia.setEditable(false);
        txtBibliografia.setRows(5);
        jScrollPane2.setViewportView(txtBibliografia);

        lblDificuldade.setText("Dificuldade");

        txtDificuldade.setEditable(false);

        cmbDificuldade.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Adelino", "Baixa", "Média", "Alta", "Tobar" }));
        cmbDificuldade.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbDificuldadeActionPerformed(evt);
            }
        });

        lblProfessor.setText("Professor");

        txtProfessor.setEditable(false);

        cmbProfessor.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbProfessorActionPerformed(evt);
            }
        });

        txtCodigo.setEditable(false);
        txtCodigo.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0"))));

        txtCargaHoraria.setEditable(false);
        txtCargaHoraria.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(java.text.NumberFormat.getIntegerInstance())));

        lblCargaHoraria.setText("Carga Horária");

        lblModulacao.setText("Modulação");

        txtModulacao.setEditable(false);
        txtModulacao.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(java.text.NumberFormat.getIntegerInstance())));

        txtFaltas.setEditable(false);
        txtFaltas.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(java.text.NumberFormat.getIntegerInstance())));

        lblFaltas.setText("Faltas");

        lblNenhumProfessor.setText("Nenhum professor associado!");

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 340, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap())
                    .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                            .addComponent(btnEditar)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(btnExcluir)
                            .addGap(26, 26, 26))
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                            .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel2Layout.createSequentialGroup()
                                    .addComponent(lblNome)
                                    .addGap(90, 90, 90))
                                .addComponent(txtNome, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 388, Short.MAX_VALUE))
                            .addGap(25, 25, 25)
                            .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(lblCodigo)
                                .addComponent(txtCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGap(26, 26, 26))
                        .addGroup(jPanel2Layout.createSequentialGroup()
                            .addComponent(lblProfessor)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(txtProfessor, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(lblNenhumProfessor)
                            .addContainerGap())
                        .addGroup(jPanel2Layout.createSequentialGroup()
                            .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(cmbDificuldade, 0, 243, Short.MAX_VALUE)
                                .addGroup(jPanel2Layout.createSequentialGroup()
                                    .addComponent(lblDificuldade)
                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                    .addComponent(txtDificuldade, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addGap(278, 278, 278))
                        .addGroup(jPanel2Layout.createSequentialGroup()
                            .addComponent(cmbProfessor, 0, 243, Short.MAX_VALUE)
                            .addGap(278, 278, 278))
                        .addGroup(jPanel2Layout.createSequentialGroup()
                            .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(lblCargaHoraria)
                                .addComponent(txtCargaHoraria, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGap(53, 53, 53)
                            .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(lblModulacao)
                                .addComponent(txtModulacao, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGap(53, 53, 53)
                            .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(lblFaltas)
                                .addComponent(txtFaltas, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addContainerGap(169, Short.MAX_VALUE))
                        .addGroup(jPanel2Layout.createSequentialGroup()
                            .addComponent(lblBibliografia)
                            .addContainerGap(469, Short.MAX_VALUE)))))
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblNome)
                    .addComponent(lblCodigo))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(txtCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblProfessor)
                    .addComponent(txtProfessor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblNenhumProfessor))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(cmbProfessor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(lblCargaHoraria)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtCargaHoraria, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addGroup(jPanel2Layout.createSequentialGroup()
                            .addComponent(lblFaltas)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(txtFaltas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(jPanel2Layout.createSequentialGroup()
                            .addComponent(lblModulacao)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(txtModulacao, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addGap(18, 18, 18)
                .addComponent(lblBibliografia)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 161, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(lblDificuldade)
                        .addComponent(txtDificuldade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGap(21, 21, 21)
                        .addComponent(cmbDificuldade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 55, Short.MAX_VALUE)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnEditar)
                    .addComponent(btnExcluir))
                .addGap(41, 41, 41))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(pnlHead, javax.swing.GroupLayout.DEFAULT_SIZE, 701, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(pnlHead, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
        );
    }// </editor-fold>//GEN-END:initComponents

    private void btnNovaDisciplinaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNovaDisciplinaActionPerformed
        // TODO add your handling code here:

        criando = true;

        if(editando)
            editando = false;
        
        //abre para criação de uma nova disciplina
        else
        {
            btnEditar.setText("OK");
            btnEditar.setEnabled(true);
            btnExcluir.setText("Cancelar");
            btnExcluir.setEnabled(true);
            lblNenhumProfessor.setVisible(true);

            txtBibliografia.setEditable(true);
            txtCargaHoraria.setEditable(true);
            cmbProfessor.setVisible(true);
            txtNome.setEditable(true);
            txtModulacao.setEditable(true);
            txtCodigo.setEditable(true);
            cmbDificuldade.setVisible(true);
            txtFaltas.setEditable(true);
        }

        limpaCampos();
        listaProfessores();
    }//GEN-LAST:event_btnNovaDisciplinaActionPerformed

    private void cmbProfessorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbProfessorActionPerformed
        // TODO add your handling code here:

        //um novo professor foi escolhido
        if(this.cmbProfessor.getSelectedIndex() != -1)
        {
            txtProfessor.setText(this.cmbProfessor.getSelectedItem().toString());

            if(this.cmbProfessor.getSelectedItem().toString().isEmpty())
            {
                lblNenhumProfessor.setVisible(true);
            }

            else
                lblNenhumProfessor.setVisible(false);
        }

    }//GEN-LAST:event_cmbProfessorActionPerformed

    private void cmbDificuldadeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbDificuldadeActionPerformed
        // TODO add your handling code here:

        //novo nivel de dificuldade selecionado
        if(this.cmbDificuldade.getSelectedIndex() != -1)
        {
             txtDificuldade.setText(this.cmbDificuldade.getSelectedItem().toString());
        }
    }//GEN-LAST:event_cmbDificuldadeActionPerformed

    private void btnExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExcluirActionPerformed
        // TODO add your handling code here:

        //testa se estava-se editando ou criando para saber se ação desejada foi na verdade cancelar
        if(editando || criando)
        {
            editando = false;
            criando = false;

            if(criando)
            {
                limpaCampos();
                btnEditar.setEnabled(false);
                btnExcluir.setEnabled(false);
               lblNenhumProfessor.setVisible(false);
            }

            else
            {
                this.lstDisciplinasMouseClicked(null);
            }

            btnEditar.setText("Editar");
            btnExcluir.setText("Excluir");

            txtBibliografia.setEditable(false);
            txtCargaHoraria.setEditable(false);
            cmbProfessor.setVisible(false);
            txtNome.setEditable(false);
            txtModulacao.setEditable(false);
            txtCodigo.setEditable(false);
            cmbDificuldade.setVisible(false);
            txtFaltas.setEditable(false);
        }

        else
        {
            try
            {
                //excluir!
                ResultSet resultado = Conexao.getInstance().consultar("select * from aulas where disc_código ="+txtCodigo.getText());

                if(resultado.last())
                {
                    JOptionPane.showMessageDialog(null,"Não é possível excluir. Existem aulas dessa disciplina cadastradas na agenda!","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
                }

                else//deleta disciplina
                {
                    Conexao.getInstance().consultar("delete disciplinas where código ="+txtCodigo.getText());
                    listaDisciplinas();
                    limpaCampos();
                    btnEditar.setEnabled(false);
                    btnExcluir.setEnabled(false);
                    lblNenhumProfessor.setVisible(false);
                }
            }

            catch (Exception ex) {
                Logger.getLogger(PainelDisciplinas.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }//GEN-LAST:event_btnExcluirActionPerformed

    private void listaProfessores()
    {
        try
        {
            ResultSet resultado = Conexao.getInstance().consultar("select nome, sobrenome from professores");

            int i = 0;

            cmbProfessor.removeAllItems();

            if(resultado.last())
            {
                resultado.beforeFirst();

                for(;resultado.next();i++)
                {
                    cmbProfessor.insertItemAt(resultado.getString(2)+", "+resultado.getString(1), i);
                }
            }
        }

        catch (Exception ex)
        {
            Logger.getLogger(PainelDisciplinas.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void salvarEdicao()
    {
        boolean valido = true;

        try
        {
            ResultSet resultado;

            //testa se o codigo jah estah sendo usado
            if(txtCodigo.getText().compareTo(lstDisciplinas.getSelectedValue().toString().split(" - ")[1])!=0)
            {
                resultado = Conexao.getInstance().consultar("select * from disciplinas where código ="+txtCodigo.getText());

                if(resultado.last())
                {
                    valido = false;
                    JOptionPane.showMessageDialog(null,"Não é possível atualizar disciplina. Já existe uma disciplina cadastrada com esse código!","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
                }
            }

            //testa se os valores para os campos são validos
                valido = testaCampos();

            if(valido)
            {
                editando = false;
                
                //salva atualizações

                if(txtCodigo.getText().compareTo(lstDisciplinas.getSelectedValue().toString().split(" - ")[1])!=0)//atualiza aulas/apresentações/provas associadas a essa disciplina
                {
                    resultado = Conexao.getInstance().consultar("update aulas set disc_código = null where disc_código ="+lstDisciplinas.getSelectedValue().toString().split(" - ")[1]);
                    resultado = Conexao.getInstance().consultar("update apresentações set disc_código =null where disc_código ="+lstDisciplinas.getSelectedValue().toString().split(" - ")[1]);
                    resultado = Conexao.getInstance().consultar("update provas set disc_código =null where disc_código ="+lstDisciplinas.getSelectedValue().toString().split(" - ")[1]);
                }
                
                Conexao.getInstance().consultar("update disciplinas set " +
                        "dificuldade ='" +txtDificuldade.getText()+"',"+
                        "código =" +txtCodigo.getText()+","+
                        "nome ='" +txtNome.getText()+"',"+
                        "bibliografia ='" +txtBibliografia.getText()+"',"+
                        "carga_horária =" +txtCargaHoraria.getText()+","+
                        "modulação =" +txtModulacao.getText()+","+
                        "faltas ="+txtFaltas.getText()+","+
                        "prof_nome ='" +txtProfessor.getText().split(", ")[1]+"',"+
                        "prof_sobrenome ='" +txtProfessor.getText().split(", ")[0]+"'"+
                        " where código ="+lstDisciplinas.getSelectedValue().toString().split(" - ")[1]);

                if(txtCodigo.getText().compareTo(lstDisciplinas.getSelectedValue().toString().split(" - ")[1])!=0)//atualiza aulas/apresentações/provas associadas a essa disciplina
                {
                    resultado = Conexao.getInstance().consultar("update aulas set disc_código ="+txtCodigo.getText()+" where disc_código is null");
                    resultado = Conexao.getInstance().consultar("update apresentações set disc_código ="+txtCodigo.getText()+" where disc_código is null");
                    resultado = Conexao.getInstance().consultar("update provas set disc_código ="+txtCodigo.getText()+" where disc_código is null");
                }

                txtBibliografia.setEditable(false);
                txtCargaHoraria.setEditable(false);
                txtCodigo.setEditable(false);
                txtFaltas.setEditable(false);
                txtModulacao.setEditable(false);
                txtNome.setEditable(false);
                lblNenhumProfessor.setVisible(false);
                btnEditar.setText("Editar");
                btnEditar.setEnabled(false);
                btnExcluir.setText("Excluir");
                btnExcluir.setEnabled(false);
                cmbDificuldade.setSelectedIndex(-1);
                cmbProfessor.setSelectedIndex(-1);
                limpaCampos();
                listaDisciplinas();
            }
        }

        catch (Exception ex)
        {
            Logger.getLogger(PainelDisciplinas.class.getName()).log(Level.SEVERE, null, ex);
        }

    }


    private boolean testaCampos()
    {
        boolean validade = true;

        if(txtNome.getText().length() > 20)
        {
            validade = false;
            JOptionPane.showMessageDialog(null,"Não é possível atualizar disciplina. Campo NOME muito longo, deve ter no máximo 20 caracteres!","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
        }

        else if(txtBibliografia.getText().length() > 50)
        {
            validade = false;
            JOptionPane.showMessageDialog(null,"Não é possível atualizar disciplina. Campo BIBLIOGRAFIA muito longo, deve ter no máximo 50 caracteres!","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
        }

        return validade;
    }


    private void salvarCriacao()
    {
        boolean valido = true;

        try
        {
            ResultSet resultado;

            resultado = Conexao.getInstance().consultar("select * from disciplinas where código ="+txtCodigo.getText());

            if(resultado.last())
            {
                valido = false;
                JOptionPane.showMessageDialog(null,"Não é possível cadastrar disciplina. Já existe uma disciplina cadastrada com esse código!","ATENÇÃO",JOptionPane.ERROR_MESSAGE);
            }

            //testa se os valores para os campos são validos
                valido = testaCampos();

            if(valido)
            {
                editando = false;

                //salva atualizações

                Conexao.getInstance().consultar("insert into disciplinas" +
                        "(dificuldade," +
                        "código," +
                        "nome," +
                        "bibliografia," +
                        "carga_horária," +
                        "modulação," +
                        "faltas," +
                        "prof_nome," +
                        "prof_sobrenome) values (" +
                        "'" +txtDificuldade.getText()+"',"+
                        txtCodigo.getText()+","+
                        "'" +txtNome.getText()+"',"+
                        "'" +txtBibliografia.getText()+"',"+
                        txtCargaHoraria.getText()+","+
                        txtModulacao.getText()+","+
                        txtFaltas.getText()+","+
                        "'" +txtProfessor.getText().split(", ")[1]+"',"+
                        "'" +txtProfessor.getText().split(", ")[0]+"')");

                txtBibliografia.setEditable(false);
                txtCargaHoraria.setEditable(false);
                txtCodigo.setEditable(false);
                txtFaltas.setEditable(false);
                txtModulacao.setEditable(false);
                txtNome.setEditable(false);
                lblNenhumProfessor.setVisible(false);
                btnEditar.setText("Editar");
                btnEditar.setEnabled(false);
                btnExcluir.setText("Excluir");
                btnExcluir.setEnabled(false);
                cmbDificuldade.setSelectedIndex(-1);
                cmbProfessor.setSelectedIndex(-1);
                limpaCampos();
                listaDisciplinas();
            }
        }

        catch (Exception ex)
        {
            Logger.getLogger(PainelDisciplinas.class.getName()).log(Level.SEVERE, null, ex);
        }
    }


    private void btnEditarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEditarActionPerformed
        // TODO add your handling code here:

        if(editando)
            salvarEdicao();

        else if(criando)
            salvarCriacao();

        //abre para edição de uma nova disciplina
        else
        {
            editando = true;
            
            btnEditar.setText("OK");
            btnEditar.setEnabled(true);
            btnExcluir.setText("Cancelar");
            btnExcluir.setEnabled(true);

            txtBibliografia.setEditable(true);
            txtCargaHoraria.setEditable(true);
            cmbProfessor.setVisible(true);
            txtNome.setEditable(true);
            txtModulacao.setEditable(true);
            txtCodigo.setEditable(true);
            cmbDificuldade.setVisible(true);
            txtFaltas.setEditable(true);

            listaProfessores();
        }
    }//GEN-LAST:event_btnEditarActionPerformed

    private void lstDisciplinasMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lstDisciplinasMouseClicked
        // TODO add your handling code here:

        if(!lstDisciplinas.isSelectionEmpty())
        {
            criando = false;
            editando = false;

            lblNenhumProfessor.setVisible(false);

            btnEditar.setText("Editar");
            btnEditar.setEnabled(true);
            btnExcluir.setText("Excluir");
            btnExcluir.setEnabled(true);

            txtBibliografia.setEditable(false);
            txtCargaHoraria.setEditable(false);
            cmbProfessor.setVisible(false);
            txtNome.setEditable(false);
            txtModulacao.setEditable(false);
            txtCodigo.setEditable(false);
            cmbDificuldade.setVisible(false);
            txtFaltas.setEditable(false);

            limpaCampos();
            
            try
            {
                ResultSet resultado = Conexao.getInstance().consultar("select dificuldade,código,nome,bibliografia,carga_horária," +
                                            "modulação,faltas,prof_nome,prof_sobrenome from disciplinas " +
                                            "where código ="+lstDisciplinas.getSelectedValue().toString().split(" - ")[1]);

                if(resultado.last())
                {
                    resultado.beforeFirst();
                    resultado.next();
                    
                    txtDificuldade.setText(resultado.getString(1));
                    txtCodigo.setText(resultado.getString(2));
                    txtNome.setText(resultado.getString(3));
                    txtBibliografia.setText(resultado.getString(4));
                    txtCargaHoraria.setText(resultado.getString(5));
                    txtModulacao.setText(resultado.getString(6));
                    txtFaltas.setText(resultado.getString(7));

                    if(resultado.getString(9) == null)
                    {
                        txtProfessor.setText("");
                        lblNenhumProfessor.setVisible(true);
                    }

                    else
                        txtProfessor.setText(resultado.getString(9)+", "+resultado.getString(8));
                }
            }

            catch (Exception ex)
            {
                Logger.getLogger(PainelDisciplinas.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }//GEN-LAST:event_lstDisciplinasMouseClicked

    private void limpaCampos()
    {
        txtBibliografia.setText("");
        txtCargaHoraria.setText("");
        txtNome.setText("");
        txtModulacao.setText("");
        txtCodigo.setText("");
        txtFaltas.setText("");
        txtProfessor.setText("");
        txtDificuldade.setText("");
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnEditar;
    private javax.swing.JButton btnExcluir;
    private javax.swing.JButton btnNovaDisciplina;
    private javax.swing.JComboBox cmbDificuldade;
    private javax.swing.JComboBox cmbProfessor;
    private javax.swing.JLabel icoDisciplinas;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JLabel lblBibliografia;
    private javax.swing.JLabel lblCargaHoraria;
    private javax.swing.JLabel lblCodigo;
    private javax.swing.JLabel lblDescCabecalho;
    private javax.swing.JLabel lblDificuldade;
    private javax.swing.JLabel lblDisiciplinas;
    private javax.swing.JLabel lblFaltas;
    private javax.swing.JLabel lblModulacao;
    private javax.swing.JLabel lblNenhumProfessor;
    private javax.swing.JLabel lblNome;
    private javax.swing.JLabel lblProfessor;
    private javax.swing.JList lstDisciplinas;
    private javax.swing.JPanel pnlHead;
    private javax.swing.JTextArea txtBibliografia;
    private javax.swing.JFormattedTextField txtCargaHoraria;
    private javax.swing.JFormattedTextField txtCodigo;
    private javax.swing.JTextField txtDificuldade;
    private javax.swing.JFormattedTextField txtFaltas;
    private javax.swing.JFormattedTextField txtModulacao;
    private javax.swing.JTextField txtNome;
    private javax.swing.JTextField txtProfessor;
    // End of variables declaration//GEN-END:variables

}
